package com.kamistoat.meimeimall.meimeimallmember.config;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

/**
 * 远程接口feign的拦截器，作用是同步新请求和源请求的cookie
 */
@Configuration
public class MemberFeignConfig {

    @Bean("requestInterceptor")
    public RequestInterceptor requestInterceptor(){
        return new RequestInterceptor(){
            /**
             * 重写feign拦截器中唯一的方法
             * @param requestTemplate feign自动生成的请求，即将被发给远程方法接口。默认情况下这个请求不包含请求头
             */
            @Override
            public void apply(RequestTemplate requestTemplate) {
                // 一个集成好的方法。其实就是用ThreadLocal机制，把源请求的所有数据拿来
                ServletRequestAttributes requestAttributes =
                        (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
                if(requestAttributes!=null){
                    // if一下，目的是有的时候确实是不需要上下文请求，就不麻烦了
                    // 把源请求的cookie拿来
                    String oldCookie = requestAttributes.getRequest().getHeader("Cookie");
                    // 为新的请求同步源请求的cookie
                    requestTemplate.header("Cookie",oldCookie);
                }
            }
        };
    }
}
